package controllers

import (
	"LoveU/models"
	"LoveU/utils"

	"strconv"

	"github.com/astaxie/beego"
)

type MoodController struct {
	beego.Controller
}

// 个人心情列表
// 需要的参数：
// page
// pagesize
// TYPE类型
func (this *MoodController) MoodList() {
	var codejson interface{}

	sid := this.Input().Get("sessionid")
	mySession := SessionStore[sid]
	if mySession == nil {
		notLoginMood(this)
		return
	}
	userid := mySession.Get("userid")

	page_str := this.Input().Get("page")
	if page_str == "" {
		getJSONMood(this, utils.ARGUMENT_DENIED, "参数错误41", "", nil)
		return
	}
	page, err0 := strconv.ParseInt(page_str, 10, 64)
	pageSize_str := this.Input().Get("pagesize")
	if pageSize_str == "" {
		getJSONMood(this, utils.ARGUMENT_DENIED, "参数错误47", "", nil)
		return
	}
	pageSize, err1 := strconv.ParseInt(pageSize_str, 10, 64)
	TYPE_str := this.Input().Get("type")
	if TYPE_str == "" {
		getJSONMood(this, utils.ARGUMENT_DENIED, "参数错误53", "", nil)
		return
	}
	TYPE, err2 := strconv.ParseInt(TYPE_str, 10, 64)
	if err0 != nil || err1 != nil || err2 != nil {
		getJSONMood(this, utils.ARGUMENT_DENIED, "参数错误63", "", nil)
		return
	}

	if TYPE == 1 || TYPE == 2 || TYPE == 3 {
	} else {
		getJSONMood(this, utils.ARGUMENT_DENIED, "参数错误64", "", nil)
		return
	}

	var status int64
	var panigation interface{}
	if TYPE == 3 {
		friendidStr := this.Input().Get("friendid")
		fid, err64 := strconv.ParseInt(friendidStr, 10, 64)

		if err64 != nil {
			getJSONMood(this, utils.ARGUMENT_DENIED, "参数错误67", "", nil)
			return
		}
		flag := models.CheckIsFriend(userid.(int64), fid)
		if flag == false {
			getJSONMood(this, utils.ARGUMENT_DENIED, "参数错误72", "", nil)
			return
		}
		panigation, status = models.MoodList(fid, page, pageSize, 1)
	} else {
		panigation, status = models.MoodList(userid.(int64), page, pageSize, TYPE)
	}

	data := utils.Message{
		Status:    utils.MOOD_LIST_OK,
		Msg:       "success",
		Result:    &panigation,
		Sessionid: "",
	}
	switch status {
	case utils.UNKNOWN_ERROR:
		codejson = utils.Message{utils.UNKNOWN_ERROR, "系统错误88", nil, ""}
	case utils.MOOD_LIST_OK:
		codejson = data
	default:
		codejson = utils.Message{status, "系统错误92", nil, ""}

	}
	this.Data["json"] = codejson
	this.ServeJSON()
	return
}

// // 心情列表
// func (this *MoodController) MoodList() {

// }

// 发布心情
func (this *MoodController) PublishMood() {
	sid := this.Input().Get("sessionid")
	mySession := SessionStore[sid]
	if mySession == nil {
		notLoginMood(this)
		return
	}
	userid := mySession.Get("userid")

	content := this.Input().Get("content")
	if content == "" {
		getJSONMood(this, utils.MOOD_POST_IS_NULL, "心情内容为空", "", nil)
		return
	}
	status := models.Newmood(userid.(int64), content)
	switch status {
	case utils.MOOD_POST_OK:
		getJSONMood(this, utils.MOOD_POST_OK, "success", "", nil)
		return
	case utils.UNKNOWN_ERROR:
		getJSONMood(this, utils.UNKNOWN_ERROR, "系统错误", "", nil)
		return
	default:
		getJSONMood(this, utils.UNKNOWN_ERROR, "系统错误", "", nil)
		return
	}
}

// 删除心情
func (this *MoodController) DeleteMood() {
	sid := this.Input().Get("sessionid")
	mySession := SessionStore[sid]
	if mySession == nil {
		notLoginMood(this)
		return
	}
	userid := mySession.Get("userid")

	moodid := this.Input().Get("moodid")
	moodidInt, err := strconv.ParseInt(moodid, 10, 64)
	if err != nil {
		getJSONMood(this, utils.ARGUMENT_DENIED, "参数错误", "", nil)
		return
	}
	status := models.Deletemood(moodidInt, userid.(int64))
	switch status {
	case utils.MOOD_DELETE_OK:
		getJSONMood(this, utils.MOOD_DELETE_OK, "success", "", nil)
		return
	case utils.UNKNOWN_ERROR:
		getJSONMood(this, utils.UNKNOWN_ERROR, "系统错误", "", nil)
		return
	default:
		getJSONMood(this, utils.UNKNOWN_ERROR, "系统错误", "", nil)
		return
	}
}

/* 返回某心情或评论下的评论
 【参数】sessionid；
	ismood（是否为心情消息）1：心情  0：评论；
	tid（消息ID）；
	page（第...页）；
	pagesize（每页...项）
 【注意：心情下的评论按发表时间倒序排列；评论下的评论则正序排列】
*/
func (this *MoodController) CommentList() {
	sid := this.Input().Get("sessionid")
	mySession := SessionStore[sid]
	if mySession == nil {
		notLoginMood(this)
		return
	}

	tidStr := this.Input().Get("tid")
	tid, err := strconv.ParseInt(tidStr, 10, 64)
	if err != nil {
		getJSONMood(this, utils.ARGUMENT_DENIED, "参数错误", "", nil)
		return
	}

	page_str := this.Input().Get("page")
	if page_str == "" {
		getJSONMood(this, utils.ARGUMENT_DENIED, "参数错误41", "", nil)
		return
	}
	page, err0 := strconv.ParseInt(page_str, 10, 64)
	pageSize_str := this.Input().Get("pagesize")
	if pageSize_str == "" {
		getJSONMood(this, utils.ARGUMENT_DENIED, "参数错误47", "", nil)
		return
	}
	pageSize, err1 := strconv.ParseInt(pageSize_str, 10, 64)
	TYPE_str := this.Input().Get("ismood")
	if TYPE_str == "" {
		getJSONMood(this, utils.ARGUMENT_DENIED, "参数错误53", "", nil)
		return
	}
	TYPE, err2 := strconv.ParseBool(TYPE_str)
	if err0 != nil || err1 != nil || err2 != nil {
		getJSONMood(this, utils.ARGUMENT_DENIED, "参数错误63", "", nil)
		return
	}

	comments := models.CommentList(TYPE, tid, page, pageSize)
	if comments == nil {
		getJSONMood(this, utils.UNKNOWN_ERROR, "数据库错误", "", nil)
		return
	}
	getJSONMood(this, utils.MOOD_LIST_OK, "success", "", comments)
}

// 发布评论
// 参数需求：
// tid：目标id
// comment：评论内容
// flag：评论类型（针对心情还是针对评论）1:心情  0:评论
// 【注意：tid尽量避免指向“评论下的评论”以节约查询工作量。】
func (this *MoodController) PublishComment() {
	sid := this.Input().Get("sessionid")
	mySession := SessionStore[sid]
	if mySession == nil {
		notLoginMood(this)
		return
	}
	userid := mySession.Get("userid")

	tid := this.Input().Get("tid")
	tidInt, err := strconv.ParseInt(tid, 10, 64)
	if err != nil {
		getJSONMood(this, utils.ARGUMENT_DENIED, "参数错误", "", nil)
		return
	}
	comment := this.Input().Get("comment")
	flag := this.Input().Get("flag")
	flagbool, err := strconv.ParseBool(flag)
	if err != nil {
		getJSONMood(this, utils.ARGUMENT_DENIED, "参数错误", "", nil)
		return
	}
	if comment == "" {
		getJSONMood(this, utils.MOOD_POST_IS_NULL, "心情内容为空", "", nil)
		return
	}
	status := models.AddComment(tidInt, userid.(int64), comment, flagbool)
	switch status {
	case utils.MOOD_POST_OK:
		getJSONMood(this, utils.MOOD_POST_OK, "success", "", nil)
		return
	default:
		getJSONMood(this, utils.UNKNOWN_ERROR, "数据库错误", "", nil)
		return
	}
}

// 删除评论
func (this *MoodController) DeleteComment() {
	sid := this.Input().Get("sessionid")
	mySession := SessionStore[sid]
	if mySession == nil {
		notLoginMood(this)
		return
	}
	userid := mySession.Get("userid")

	commentid := this.Input().Get("commentid")
	commentidInt, err := strconv.ParseInt(commentid, 10, 64)
	if err != nil {
		getJSONMood(this, utils.ARGUMENT_DENIED, "参数错误", "", nil)
		return
	}
	status := models.DeleteComment(commentidInt, userid.(int64))
	switch status {
	case utils.MOOD_DELETE_OK:
		getJSONMood(this, utils.MOOD_DELETE_OK, "success", "", nil)
		return
	case utils.UNKNOWN_ERROR:
		getJSONMood(this, utils.UNKNOWN_ERROR, "系统错误", "", nil)
		return
	default:
		getJSONMood(this, utils.UNKNOWN_ERROR, "系统错误", "", nil)
		return
	}

}
